#include<bits/stdc++.h>
using namespace std;
const int MAXN=5e5+10;
int n,m,head[MAXN],cnt,depth[MAXN],f[20][MAXN];
struct edge
{
	int v,next;
}e[MAXN*2];
void addedge(int x,int y)
{
	e[++cnt]=(edge){y,head[x]};
	head[x]=cnt;
	return;
}
void dfs(int u)
{
	for(int i=head[u];i;i=e[i].next)
	{
		int v=e[i].v;
		if(v==f[0][u])continue;
		depth[v]=depth[u]+1;
		f[0][v]=u;
		dfs(v);
	}
	return;
}
int LCA(int u,int v)
{
	if(depth[u]>depth[v])swap(u,v);
	for(int i=19;~i;--i)
		if(depth[f[i][v]]>=depth[u])
			v=f[i][v];
	if(u==v)return u;
	for(int i=19;~i;--i)
		if(f[i][u]!=f[i][v])
		{
			u=f[i][u];
			v=f[i][v];
		}
	return f[0][u];
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<n;++i)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		addedge(x,y);
		addedge(y,x);
	}
	f[0][1]=1;
	dfs(1);
	for(int i=1;i<=19;++i)
		for(int j=1;j<=n;++j)
			f[i][j]=f[i-1][f[i-1][j]];
	while(m--)
	{
		int x,y,z,a,b,c;
		scanf("%d%d%d",&x,&y,&z);
		a=LCA(x,y);
		b=LCA(x,z);
		c=LCA(y,z);
		if(a==b)printf("%d ",c);
		else if(b==c)printf("%d ",a);
		else printf("%d ",b);
		printf("%d\n",depth[x]+depth[y]+depth[z]-depth[a]-depth[b]-depth[c]);
	}
	return 0;
}
